In a typical communications system, information is transmitted from a sender in the form of a communications signal representing the information. The communications signal typically is communicated to a receiving unit over a communications medium such as a radio, optical fiber, coaxial cable or similar link, which may introduce disturbances such as noise, delay, and distortion in the communications signal. These disturbances can induce errors when recovering the original information from the communicated communications signal at the receiving unit.
Conventional responses to overcome this problem include increasing the power level of the transmitted communications signal in order to increase the probability that the original information may be recovered. However, the ability to increase transmitter power may be limited due to power limitations of transmitter electronics, regulations on peak signal power levels and constraints on the power available for transmitting, for example, power supply limitations in devices such as mobile radiotelephones and satellites.
Redundancy may be introduced into a communications signal by using error control coding techniques. Redundant symbols supplied in a code such as block or convolutional code can provide an additional "separation" between the words of the set of code words, thus allowing a receiver which receives a group of symbols over a noisy communications channel to more easily discriminate between words of the set of code words, typically by determining which member of the set of code words most closely resembles the received group of symbols.
Many error control codes are effective at correcting random errors, e.g., errors which affect individual symbols in a random distributed fashion, while others are effective at compensating for so-called "burst" errors, e.g., errors which persist over several consecutive symbols. To compensate for burst errors, many systems employ interleaving which reorders symbols in a stream such that burst errors are more randomly distributed, for example, by using a device which stores the symbol stream in a matrix by rows and then retrieves the stored symbols by columns, such that the sequence retrieved from the device represents a reordering of the original input sequence. To combat random and burst errors, a system may employ a combination of random error correction encoding and interleaving, for example a cascade of a binary convolutional code and an interleaver, or a so-called "turbo coding" scheme, as described in U.S. Pat. No. 5,446,747 to Berrou et al. Turbo coding schemes typically employ a first code to encode a source data stream and a second code to encode an interleaved version of the source data stream to produce first and second encoded streams which are multiplexed and communicated over a channel. The received data stream typically is demultiplexed and decoded by first and second decoders employing the first and second codes, with appropriate interleaving and deinterleaving, with the output of one decoder being used to aid the other decoder in decoding the demultiplexed sequences in an iterative fashion.
While techniques such as turbo-coding are generally effective at reducing error rates for information communicated over a channel, conventional decoding schemes may not optimally decode the received information under various channel conditions. Turbo-coding can provide improved power efficiency, but may involve a large number of computations which may be unnecessary under favorable channel conditions and which may unnecessarily consume power.